\subsection{Ejercicio 2}

En este ejercicio habia que hacer rutinas que imprimieran en pantalla las excepciones que pueden ocurrir. Para ello se creo una funcion \code{kprintf} para imprimir en pantalla. Se crearon rutinas similares para las primeras 19 interrupciones, con la unica diferencia de mostrar un mensaje diferente cada vez. \\

Para cada interrupcion, se crea una entrada en la tabla IDT, esto lo hace la funcion \code{inicializar\_idt}. Cada posicion de la tabla se corresponde con un descriptor que apunta a la rutina correspondiente que maneja la interrupcion. Luego se carga el IDTR ( descriptor que apunta hacia la IDT) con la instruccion \code{lidt [IDT\_DESC]}.
\\

Tambien se escribio codigo que al generarse una excepcion mostrara el estado de todos los registros, incluidas las primeras entradas del stack. La funcion \code{InformaeEstado} se encarga de esto leyendo los registros y usando la funcion \code{kprintf}.


\begin{itemize}
	\item Pregunta 2: ¿Cómo se puede hacer para generar una excepción sin utilizar la instrucción \code{int}?¿Cuáles son todas las formas en las que esto ocurre?
\end{itemize}

	Para generara una excepción sin utilizar la instrucción int basta con generar por código el error que produce dicha excepción, es decir, en lugar de llamar a la \code{int 0} (Division by zero exception), escribo en el código una división con el denominador igual a cero. Lo mismo sucede con la \code{int 12} (Stack fault) que se produce cuando el programa realiza alguna manejo del \code{ss} o si se llena el stack. Esto sucede con cualquier \code{Program-Error Exception}, donde el procesador genera la excepción la detectar errores de programa durante la ejecución de una aplicación, en este caso, del kernel. 
\subsection{Preguntas}
\begin{itemize}
	\item Pregunta 3: ¿Cuáles son los valores del stack? ¿Que significan? 
\end{itemize}
Cuando ocurre una excepción, dependiendo de la excepción ocurrida, el procesador hace un push de un código de error en la pila, quedando de ésta manera:


ESP		Error Code\\
\indent ESP+4		EIP\\
\indent ESP+8		CS\\
\indent ESP+12		EFLAGS\\
\indent ESP+16		ESP\\
\indent ESP+20		SS\\

En caso de que no se haga un push de un codigo de error, la pila quedará de la misma forma, sin el Error Code. \\

El Error Code es parecido a un selector de segmento pero con diferentes flags:\\

\includegraphics[scale=0.5]{errorcode.png}
EXT: Se refiere a que la excepción fue generada por algo externo al programa, como ser el hardware.\\

IDT: Si es 0 el Segment Selector Index apunta a la IDT, sino, si es 1 apunta a la GDT o al LDT actual.\\

TI: Sirve solo cuando el flag IDT = 1, indica si el Segment Selector Index apunta al GDT o al LDT.\\


